﻿using Microsoft.Extensions.Caching.Distributed;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace FreeDream.Common.CacheTwoHelper
{
    /// <summary>
    /// Redis缓存Microsoft.Extensions.Caching.Redis
    /// </summary>
    public class RedisCacheService //: ICacheService
    {
        //////Microsoft.Extensions.Caching.Redis
        //////注入Redis
        ////services.AddSingleton(new RedisCacheService(new RedisCacheOptions()
        ////{
        ////    InstanceName = Configuration.GetSection("Redis:InstanceName").Value,
        ////    Configuration = Configuration.GetSection("Redis:Connection").Value
        ////}));

        ////"Redis": {
        ////    "Connection": "127.0.0.1:6379",
        ////    "InstanceName": "Redis:"
        ////  }

        //protected RedisCache _redisCache = null;

        //public RedisCacheService(RedisCacheOptions options)
        //{
        //    _redisCache = new RedisCache(options);
        //}

        //public bool Add(string key, object value, int ExpirtionTime = 20)
        //{
        //    if (!string.IsNullOrEmpty(key))
        //    {
        //        _redisCache.Set(key, Encoding.UTF8.GetBytes(value.ToString()), new DistributedCacheEntryOptions()
        //        {
        //            AbsoluteExpiration = DateTimeOffset.Now.AddSeconds(ExpirtionTime)
        //        });
        //    }
        //    return true;
        //}

        //public bool Remove(string key)
        //{
        //    if (string.IsNullOrEmpty(key))
        //    {
        //        return false;
        //    }

        //    if (Exists(key))
        //    {
        //        _redisCache.Remove(key);
        //        return true;
        //    }
        //    return false;
        //}

        //public string GetValue(string key)
        //{
        //    if (string.IsNullOrEmpty(key))
        //    {
        //        return null;
        //    }
        //    if (Exists(key))
        //    {
        //        return _redisCache.GetString(key);
        //    }
        //    return null;
        //}

        //public bool Exists(string key)
        //{
        //    if (string.IsNullOrEmpty(key))
        //    {
        //        return false;
        //    }
        //    return !string.IsNullOrEmpty(_redisCache.GetString(key)) ? true : false;
        //}

        //public void SetValue<T>(string key, T value, int absoluteTimeoutSeconds)
        //{
        //    if (string.IsNullOrEmpty(key))
        //    {
        //        throw new ArgumentNullException("key");
        //    }
        //    if (!string.IsNullOrEmpty(_redisCache.GetString(key)))
        //    {
        //        _redisCache.Remove(key);
        //    }
        //    _redisCache.Set(key, Encoding.UTF8.GetBytes(value.ToString()), new DistributedCacheEntryOptions()
        //    {
        //        AbsoluteExpiration = DateTimeOffset.Now.AddSeconds(absoluteTimeoutSeconds)
        //    });
        //}

        //public void SetValue<T>(string key, T value, int absoluteTimeoutSeconds, int slidingExpirationSeconds)
        //{
        //    if (string.IsNullOrEmpty(key))
        //    {
        //        throw new ArgumentNullException("key");
        //    }
        //    if (!string.IsNullOrEmpty(_redisCache.GetString(key)))
        //    {
        //        _redisCache.Remove(key);
        //    }
        //    _redisCache.Set(key, Encoding.UTF8.GetBytes(value.ToString()), new DistributedCacheEntryOptions()

        //    {
        //        AbsoluteExpiration = DateTimeOffset.Now.AddSeconds(absoluteTimeoutSeconds),  //绝对超时时间，
        //        SlidingExpiration = TimeSpan.FromSeconds(slidingExpirationSeconds),  //不访问超时时间（在这个指定的时段内没有使用则过期，否则顺延）
        //    });
        //}
    }
}
